const esbuild = await import('esbuild')

let result

let js = 'hooks = DEBUG && require("hooks")'

result = esbuild.transformSync(js, {
    define: {
        DEBUG: 'true',
    },
})

console.log(result)

// { warnings: [], code: 'hooks = require("hooks");\n', map: '' }

result = esbuild.transformSync(js, {
    define: {
        DEBUG: 'false',
    },
})

console.log(result)

// { warnings: [], code: 'hooks = false;\n', map: '' }

// 1) esbuild 会对替换后代码做进一步简化
// hooks = true && require("hooks") -> hooks = require("hooks")\n;
// hooks = false && require("hooks") -> hooks = false;\n

result = esbuild.transformSync('id, str', {
    define: {
        id: 'text',
        str: '"text"',
    },
})

console.log(result)

// { warnings: [], code: 'text, "text";\n', map: '' }

// 2) define 中定义的【字符串内容】是【直接替换】掉源码中的【占位符号】的
// 因此如果传入的字符串值，那么就要用 `'"text"'` 的方式，否则（`'text'`）会被认定是访问源码中的 `text` 变量
